<!DOCTYPE HTML>
<html>

<head>
	<link rel="bookmark"  type="image/x-icon"  href="/img/logo.jpg"/>
	<link rel="shortcut icon" href="/img/logo.jpg">
	
			    <title>
    北望你的安
    </title>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
    <link rel="stylesheet" href="/css/mic_main.css" />
    <link rel="stylesheet" href="/css/dropdownMenu.css" />
    <meta name="keywords" content="北望你的安" />
    
    	<script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
	 
    <noscript>
        <link rel="stylesheet" href="/css/noscript.css" />
    </noscript>
    <style type="text/css">
        body:before {
          content: ' ';
          position: fixed;
          top: 0;
          background: url('/img/bg.jpg') center 0 no-repeat;
          right: 0;
          bottom: 0;
          left: 0;
          background-size: cover; 
        }
    </style>

			    
  


    <script src="/js/jquery.min.js"></script>
    <script src="/js/jquery.scrollex.min.js"></script>
    <script src="/js/jquery.scrolly.min.js"></script>
    <script src="/js/skel.min.js"></script>
    <script src="/js/util.js"></script>
    <script src="/js/main.js"></script>
	
</head>
    
		
<!-- Layouts -->



<!--  代码渲染  -->
<link rel="stylesheet" href="/css/prism_coy.css" />
<link rel="stylesheet" href="/css/typo.css" />
<!-- 文章页 -->
<body class="is-loading">
    <!-- Wrapper 外包 s-->
    <div id="wrapper" class="fade-in">
        <!-- Intro 头部显示 s -->
        <!-- Intro 头部显示 e -->
        <!-- Header 头部logo start -->
        <header id="header">
    <a href="/" class="logo">Krystalan</a>
</header>
        <!-- Nav 导航条 start -->
        <nav id="nav" class="special" >
            <ul class="menu links" >
			<!-- Homepage  主页  --> 
			<li >
	            <a href="/" rel="nofollow">主页</a>
	        </li>
			<!-- categories_name  分类   --> 
	        
	        <li class="active">
	            <a href="#s1">分类</a>
	                    <ul class="submenu">
	                        <li>
	                        <a class="category-link" href="/categories/%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0/">强化学习</a></li><li><a class="category-link" href="/categories/%E6%95%B0%E5%AD%A6/">数学</a></li><li><a class="category-link" href="/categories/%E7%AE%97%E6%B3%95/">算法</a></li><li><a class="category-link" href="/categories/%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/">自然语言处理</a></li><li><a class="category-link" href="/categories/%E9%9A%8F%E7%AC%94/">随笔</a>
	                    </ul>
	        </li>
	        
	        <!-- archives  归档   --> 
	        
	        
		        <!-- Pages 自定义   -->
		        
		        <li>
		            <a href="/tags/" title="标签">
		                标签
		            </a>
		        </li>
		        
		        <li>
		            <a href="/gallery/" title="相册">
		                相册
		            </a>
		        </li>
		        


            </ul>
            <!-- icons 图标   -->
			<ul class="icons">
                    
                    <li>
                        <a title="github" href="https://github.com/krystalan" target="_blank" rel="noopener">
                            <i class="icon fa fa-github"></i>
                        </a>
                    </li>
                    
                    <li>
                        <a title="500px" href="https://www.zhihu.com/people/krystalzhu-an" target="_blank" rel="noopener">
                            <i class="icon fa fa-500px"></i>
                        </a>
                    </li>
                    
			</ul>
</nav>

        <div id="main" >
            <div class ="post_page_title_img" style="height: 25rem;background-image: url(/img/21.jpg);background-position: center; background-repeat:no-repeat; background-size:cover;-moz-background-size:cover;overflow:hidden;" >
                <a href="#" style="padding: 4rem 4rem 2rem 4rem ;"><h2 >PyTorch笔记（五）</h2></a>
            </div>
            <!-- Post -->
            <div class="typo" style="padding: 3rem;">
                <p>本文主要讲述的是torch.utils.data库，该库主要的作用是处理数据与构建数据集，包含以下类与函数：<br><img src="/images/pytorch/5.jpg" alt="torch.utils.data"><br>其中，数据加载的核心是<code>torch.utils.data.DataLoader</code>。</p>
<h1 id="1-torch-utils-data-DataLoader"><a href="#1-torch-utils-data-DataLoader" class="headerlink" title="1 torch.utils.data.DataLoader"></a>1 torch.utils.data.DataLoader</h1><blockquote>
<p>结合了数据集和采样器，并在给定数据集上提供iterable。</p>
</blockquote>
<pre><code class="python">torch.utils.data.DataLoader(
    dataset,    #所需要加载的数据集
    batch_size=1,  
    shuffle=False,  #在每个epoch中，shuffle数据
    sampler=None,   #定义从数据集中提取样本的策略，如果指定了策略，shuffle必须为False。
    batch_sampler=None, #与sampler类似，但每次只返回一批索引，
    num_workers=0,  #要用于数据加载的子进程数，默认为0，代表仅使用主进程。
    collate_fn=None,    #合并样本列表以形成一小批张量。从map样式数据集中使用批量加载时使用
    pin_memory=False,   #若为True，则数据加载器将在返回张量之前将其复制到CUDA固定内存中
    drop_last=False,    #若为True，当全部数据不能被batch-size整除时，丢失最后不完整的batch。
    timeout=0,  #只能为非负值，若为正，则从进程中收集批的超时值
    worker_init_fn=None,    #如果不为None，则在设定种子之后和数据加载之前，这将在每个以worker id作为输入的worker子进程上调用。
    multiprocessing_context=None
)</code></pre>
<p>DataLoader支持map样式和iterable样式的数据集，具有单进程或多进程加载、自定义加载顺序、可选的自动批处理（排序）和内存固定。</p>
<h1 id="2-torch-utils-data-Dataset"><a href="#2-torch-utils-data-Dataset" class="headerlink" title="2 torch.utils.data.Dataset"></a>2 torch.utils.data.Dataset</h1><blockquote>
<p>参考文章：<a href="https://zhuanlan.zhihu.com/p/102567252" target="_blank" rel="noopener">https://zhuanlan.zhihu.com/p/102567252</a>  </p>
</blockquote>
<p>Dataset是表示数据集的<strong>抽象类</strong>（<strong>只能被继承，不能被实例化</strong>），将数据转化成Dataset类可以实现更好的读取和处理。自定义的Dataset需要继承它并且实现两个成员方法：<br>（1）<strong>getitem</strong>() 该方法定义用索引(0 到 len(self))获取一条数据或一个样本<br>（2）<strong>len</strong>() 该方法返回数据集的总长度</p>
<h1 id="3-使用Dataset与DataLoader类来读入数据集"><a href="#3-使用Dataset与DataLoader类来读入数据集" class="headerlink" title="3 使用Dataset与DataLoader类来读入数据集"></a>3 使用Dataset与DataLoader类来读入数据集</h1><p>我们来看一个例子，先使用Dataset创建一个我们自己的数据集类MyDataset：  </p>
<pre><code class="python">import torch
from torch.utils.data import Dataset,DataLoader
import pandas as pd

class MyDataset(Dataset):
    &quot;&quot;&quot; 数据集演示 &quot;&quot;&quot;
    def __init__(self, csv_file):
        self.df=pd.read_csv(csv_file,encoding=&#39;gbk&#39;)

    def __len__(self):  #返回数据总长度
        return len(self.df)

    def __getitem__(self, idx):  #返回idx索引下的数据
        return self.df.iloc[idx].text</code></pre>
<p>有了我们自己创建的MyDataset类，我们就可以对其进行实例化了：  </p>
<pre><code class="python">data = MyDataset(&#39;training_set.csv&#39;)
print(len(data))    #输出数据集长度
print(data[0])  #输出0索引对应的数据</code></pre>
<p>接下来我们使用DataLoader来加载数据集：  </p>
<pre><code class="python">a = DataLoader(data, batch_size=10)
idata=iter(a)   #创建迭代器
print(next(idata))</code></pre>
<p>如此，我们便为数据集创建了一个迭代器，每次调用next就可以读取到下一个batch的数据。数据从原始的CSV到Dataset对象再到DataLoader类对象。</p>

            </div>

            <!-- Post Comments -->
            

        </div>
        <!-- Copyright 版权 start -->
                <div id="copyright">
            <ul>
                <li>&copy;2020 北望你的安. 版权所有</li>
            </ul>
            
                <span id="busuanzi_container_site_pv">本站总访问量<span id="busuanzi_value_site_pv"></span>次，</span>
				<span id="busuanzi_container_site_uv"> 访客数 <span id="busuanzi_value_site_uv"></span> 人. </span>
			
			<br>
			<span>友情链接：<a href='http://www.demilab.cn' target='_blank'>DEMI实验室</a>&nbsp;&nbsp;&nbsp;<a href='http://zd11024.cn/' target='_blank'>ZD</a></span>
        </div>
    </div>
</body>



 	
</html>
